博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
公共的Json操作C#类
阅读量:7105 次
发布时间:2019-06-28

本文共 11065 字,大约阅读时间需要 36 分钟。

using System; using System.Data; using System.Text; using System.Collections.Generic; using System.Reflection; using System.Data.Common; using System.Collections; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.IO; using System.Text.RegularExpressions; using System.Runtime.Serialization.Json; namespace System.Common {
public static class Json {
/// /// List转成json /// ///
/// /// ///
public static string ListToJson
(IList
list, string jsonName) {
StringBuilder Json = new StringBuilder(); if (string.IsNullOrEmpty(jsonName)) jsonName = list[0].GetType().Name; Json.Append("{\"" + jsonName + "\":["); if (list.Count > 0) {
for (int i = 0; i < list.Count; i++) {
T obj = Activator.CreateInstance
(); PropertyInfo[] pi = obj.GetType().GetProperties(); Json.Append("{
"); for (int j = 0; j < pi.Length; j++) {
Type type; object o = pi[j].GetValue(list[i], null); string v = string.Empty; if (o != null) {
type = o.GetType(); v = o.ToString(); } else {
type = typeof(string); } Json.Append("\"" + pi[j].Name.ToString() + "\":" + StringFormat(v, type)); if (j < pi.Length - 1) {
Json.Append(","); } } Json.Append("}"); if (i < list.Count - 1) {
Json.Append(","); } } } Json.Append("]}"); return Json.ToString(); } ///
/// 序列化集合对象 /// public static string JsonSerializerByArrayData
(T[] tArray) {
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T[])); MemoryStream ms = new MemoryStream(); ser.WriteObject(ms, tArray); string jsonString = Encoding.UTF8.GetString(ms.ToArray()); ms.Close(); string p = @"\\/Date\((\d+)\+\d+\)\\/"; MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString); Regex reg = new Regex(p); jsonString = reg.Replace(jsonString, matchEvaluator); return jsonString; } ///
/// 序列化单个对象 /// public static string JsonSerializerBySingleData
(T t) {
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T)); MemoryStream ms = new MemoryStream(); ser.WriteObject(ms, t); string jsonString = Encoding.UTF8.GetString(ms.ToArray()); ms.Close(); string p = @"\\/Date\((\d+)\+\d+\)\\/"; MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDateToDateString); Regex reg = new Regex(p); jsonString = reg.Replace(jsonString, matchEvaluator); return jsonString; } ///
/// 反序列化单个对象 /// public static T JsonDeserializeBySingleData
(string jsonString) { //将"yyyy-MM-dd HH:mm:ss"格式的字符串转为"\/Date(1294499956278+0800)\/"格式 string p = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}"; MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate); Regex reg = new Regex(p); jsonString = reg.Replace(jsonString, matchEvaluator); DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T)); MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)); T obj = (T)ser.ReadObject(ms); return obj; } ///
/// 反序列化集合对象 /// public static T[] JsonDeserializeByArrayData
(string jsonString) { //将"yyyy-MM-dd HH:mm:ss"格式的字符串转为"\/Date(1294499956278+0800)\/"格式 string p = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}"; MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate); Regex reg = new Regex(p); jsonString = reg.Replace(jsonString, matchEvaluator); DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T[])); MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)); T[] arrayObj = (T[])ser.ReadObject(ms); return arrayObj; } ///
/// 将Json序列化的时间由/Date(1294499956278+0800)转为字符串 /// private static string ConvertJsonDateToDateString(Match m) { string result = string.Empty; DateTime dt = new DateTime(1970, 1, 1); dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value)); dt = dt.ToLocalTime(); result = dt.ToString("yyyy-MM-dd HH:mm:ss"); return result; } ///
/// 将时间字符串转为Json时间 /// private static string ConvertDateStringToJsonDate(Match m) { string result = string.Empty; DateTime dt = DateTime.Parse(m.Groups[0].Value); dt = dt.ToUniversalTime(); TimeSpan ts = dt - DateTime.Parse("1970-01-01"); result = string.Format("\\/Date({0}+0800)\\/", ts.TotalMilliseconds); return result; } ///
/// List转成json /// ///
///
///
public static string ListToJson
(IList
list) { object obj = list[0]; return ListToJson
(list, obj.GetType().Name); } ///
/// 对象转换为Json字符串 /// ///
对象 ///
Json字符串
public static string ToJson(object jsonObject) { try { StringBuilder jsonString = new StringBuilder(); jsonString.Append("{ "); PropertyInfo[] propertyInfo = jsonObject.GetType().GetProperties(); for (int i = 0; i < propertyInfo.Length; i++) { object objectValue = propertyInfo[i].GetGetMethod().Invoke(jsonObject, null); if (objectValue == null) { continue; } StringBuilder value = new StringBuilder(); if (objectValue is DateTime || objectValue is Guid || objectValue is TimeSpan) { value.Append("\"" + objectValue.ToString() + "\""); } else if (objectValue is string) { value.Append("\"" + objectValue.ToString() + "\""); } else if (objectValue is IEnumerable) { value.Append(ToJson((IEnumerable)objectValue)); } else { value.Append("\"" + objectValue.ToString() + "\""); } jsonString.Append("\"" + propertyInfo[i].Name + "\":" + value + ","); ; } return jsonString.ToString().TrimEnd(',') + "}"; } catch (Exception ex) { throw ex; } } ///
/// 对象集合转换Json /// ///
集合对象 ///
Json字符串
public static string ToJson(IEnumerable array) { string jsonString = "["; foreach (object item in array) { jsonString += ToJson(item) + ","; } if (jsonString.Length > 1) { jsonString.Remove(jsonString.Length - 1, jsonString.Length); } else { jsonString = "[]"; } return jsonString + "]"; } ///
/// 普通集合转换Json /// ///
集合对象 ///
Json字符串
public static string ToArrayString(IEnumerable array) { string jsonString = "["; foreach (object item in array) { jsonString = ToJson(item.ToString()) + ","; } jsonString.Remove(jsonString.Length - 1, jsonString.Length); return jsonString + "]"; } ///
/// Datatable转换为Json /// ///
Datatable对象 ///
Json字符串
public static string ToJson(DataTable dt) { StringBuilder jsonString = new StringBuilder(); jsonString.Append("["); DataRowCollection drc = dt.Rows; for (int i = 0; i < drc.Count; i++) { jsonString.Append("{ "); for (int j = 0; j < dt.Columns.Count; j++) { string strKey = dt.Columns[j].ColumnName; string strValue = drc[i][j].ToString(); Type type = dt.Columns[j].DataType; jsonString.Append("\"" + strKey + "\":"); strValue = StringFormat(strValue, type); if (j < dt.Columns.Count - 1) { jsonString.Append(strValue + ","); } else { jsonString.Append(strValue); } } jsonString.Append("},"); } jsonString.Remove(jsonString.Length - 1, 1); jsonString.Append("]"); if (jsonString.Length == 1) { return "[]"; } return jsonString.ToString(); } ///
/// DataTable转成Json /// ///
///
///
public static string ToJson(DataTable dt, string jsonName) { StringBuilder Json = new StringBuilder(); if (string.IsNullOrEmpty(jsonName)) jsonName = dt.TableName; Json.Append("{\"" + jsonName + "\":["); if (dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { Json.Append("{ "); for (int j = 0; j < dt.Columns.Count; j++) { Type type = dt.Rows[i][j].GetType(); Json.Append("\"" + dt.Columns[j].ColumnName.ToString() + "\":" + StringFormat(dt.Rows[i][j] is DBNull ? string.Empty : dt.Rows[i][j].ToString(), type)); if (j < dt.Columns.Count - 1) { Json.Append(","); } } Json.Append("}"); if (i < dt.Rows.Count - 1) { Json.Append(","); } } } Json.Append("]}"); return Json.ToString(); } ///
/// DataReader转换为Json /// ///
DataReader对象 ///
Json字符串
public static string ToJson(IDataReader dataReader) { try { StringBuilder jsonString = new StringBuilder(); jsonString.Append("["); while (dataReader.Read()) { jsonString.Append("{ "); for (int i = 0; i < dataReader.FieldCount; i++) { Type type = dataReader.GetFieldType(i); string strKey = dataReader.GetName(i); string strValue = dataReader[i].ToString(); jsonString.Append("\"" + strKey + "\":"); strValue = StringFormat(strValue, type); if (i < dataReader.FieldCount - 1) { jsonString.Append(strValue + ","); } else { jsonString.Append(strValue); } } jsonString.Append("},"); } if (!dataReader.IsClosed) { dataReader.Close(); } jsonString.Remove(jsonString.Length - 1, 1); jsonString.Append("]"); if (jsonString.Length == 1) { return "[]"; } return jsonString.ToString(); } catch (Exception ex) { throw ex; } } ///
/// DataSet转换为Json /// ///
DataSet对象 ///
Json字符串
public static string ToJson(DataSet dataSet) { string jsonString = "{ "; foreach (DataTable table in dataSet.Tables) { jsonString += "\"" + table.TableName + "\":" + ToJson(table) + ","; } jsonString = jsonString.TrimEnd(','); return jsonString + "}"; } ///
/// 过滤特殊字符 /// ///
///
public static string String2Json(String s) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < s.Length; i++) { char c = s.ToCharArray()[i]; switch (c) { case '\"': sb.Append("\\\""); break; case '\\': sb.Append("\\\\"); break; case '/': sb.Append("\\/"); break; case '\b': sb.Append("\\b"); break; case '\f': sb.Append("\\f"); break; case '\n': sb.Append("\\n"); break; case '\r': sb.Append("\\r"); break; case '\t': sb.Append("\\t"); break; case '\v': sb.Append("\\v"); break; case '\0': sb.Append("\\0"); break; default: sb.Append(c); break; } } return sb.ToString(); } ///
/// 格式化字符型、日期型、布尔型 /// ///
///
///
private static string StringFormat(string str, Type type) { if (type != typeof(string) && string.IsNullOrEmpty(str)) { str = "\"" + str + "\""; } else if (type == typeof(string)) { str = String2Json(str); str = "\"" + str + "\""; } else if (type == typeof(DateTime)) { str = "\"" + str + "\""; } else if (type == typeof(bool)) { str = str.ToLower(); } else if (type == typeof(byte[])) { str = "\"" + str + "\""; }else if(type==typeof(Guid)) { str = "\"" + str + "\""; } return str; } public static void RegistAjax(HtmlHead Header, Type type) { string assemblyName = type.FullName + "," + type.Assembly.FullName.Substring(0, type.Assembly.FullName.IndexOf(",")); if (type.Assembly.FullName.StartsWith("App_Code.")) { assemblyName = type.FullName + ",App_Code"; } Literal l = new Literal(); l.Text = "\n
\n" + "
\n" + "
\n" + "
\n"; Header.Controls.Add(l); } } }

 

转载地址:http://vtkhl.baihongyu.com/

你可能感兴趣的文章
在ajax请求后台时在请求标头RequestHeader加token
查看>>
SRM 408(1-250pt, 1-500pt)
查看>>
UGUI 之 控件以及按钮的监听事件系统 存档
查看>>
批量给文件或者文件夹重命名
查看>>
springMVC常用注解
查看>>
ORACLE SQL基础
查看>>
day58——Saltstack二次开发(二)
查看>>
各种算法
查看>>
asp.net文章内容分页方法
查看>>
NGUI 界面自适应
查看>>
一起学Django之Day01
查看>>
css垂直居中
查看>>
单元测试
查看>>
ASP.NET 开源 Blog 收集
查看>>
THIS关键字
查看>>
软件工程概论个人作业04(最大子数组)
查看>>
企业级 SpringBoot 教程 (二十)处理表单提交
查看>>
opencv +python 提取roi目标区域全部像素的值 得出上下限 均匀值
查看>>
Hbase
查看>>
Lua,github,nginx
查看>>